package com.example.gaoyang.util;

import com.example.gaoyang.constant.Constant;
import com.example.gaoyang.domain.SysUser;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

@Component
public class TokenUtil {

    /**
     * 构建token
     * @param sysUser
     * @return
     */
    public static String buildToken(SysUser sysUser) {
        String tokenStr = sysUser.getId() + Constant.UNDERLINE + sysUser.getUsername() + Constant.UNDERLINE + sysUser.getPassword();
        return Base64Util.encodeToLowercase(tokenStr);
    }

    /**
     * 从当前请求中解析用户名（无参版本）
     * @return 用户名，如果解析失败返回null
     */
    public static Long parseUserIdFromCurrentRequest() {
        try {
            // 从当前线程获取请求对象
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
            // 从请求头中获取token
            String token = request.getHeader(HttpHeaders.AUTHORIZATION);
            // 如果请求头中没有，尝试从参数中获取
            if (token == null || token.isEmpty()) {
                token = request.getParameter("token");
            }
            // 如果还是没有token，返回null
            if (token == null || token.isEmpty()) {
                return null;
            }
            // Base64解码
            String decodedStr = Base64Util.decodeFromLowercase(token);
            // 按下划线分割
            String[] parts = decodedStr.split(Constant.UNDERLINE);
            // 格式为: userId_username_password，所以userId是第1个元素
            if (parts.length >= 2) {
                return Long.valueOf(parts[0]);
            }
        } catch (Exception e) {
            // 解码失败或格式不正确
            return null;
        }
        return null;
    }


}
